gizmo: Unparent all child widgets in finalize
authorTimm Bäder <mail@baedert.org>
Thu, 11 May 2017 19:52:18 +0000 (21:52 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 20 Jul 2017 01:27:12 +0000 (21:27 -0400)
gtk/gtkgizmo.c

index 38cd3d56b1c1a05c37370b3f4ab54effa6f0f15a..f80fabe3eec60cd745436317a3aacfc0a926eff0 100644 (file)
@@ -50,11 +50,33 @@ gtk_gizmo_snapshot (GtkWidget   *widget,
     GTK_WIDGET_CLASS (gtk_gizmo_parent_class)->snapshot (widget, snapshot);
 }
 
+static void
+gtk_gizmo_finalize (GObject *object)
+{
+  GtkGizmo *self = GTK_GIZMO (object);
+  GtkWidget *widget;
+
+  widget = _gtk_widget_get_first_child (GTK_WIDGET (self));
+  while (widget != NULL)
+    {
+      GtkWidget *next = _gtk_widget_get_next_sibling (widget);
+
+      gtk_widget_unparent (widget);
+
+      widget = next;
+    }
+
+  G_OBJECT_CLASS (gtk_gizmo_parent_class)->finalize (object);
+}
+
 static void
 gtk_gizmo_class_init (GtkGizmoClass *klass)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
+  object_class->finalize = gtk_gizmo_finalize;
+
   widget_class->measure = gtk_gizmo_measure;
   widget_class->size_allocate = gtk_gizmo_size_allocate;
   widget_class->snapshot = gtk_gizmo_snapshot;